<?php 

/* Funcoes genericas */

/** Formulario padrao de insercao de dados */
function modalidades_standard_form(&$form, $modalidade) {
	$form['modalidades'] = array(
			'#type' 				=> 'value',
			'#value' 				=> $modalidade, // objeto que vai armazenar os dados cadastrados
	);

	// Cadastro de dados gerais
	$form['cadastro'] = array(
			'#type' 				=> 'fieldset',
			'#title' 				=> t('Dados de cadastro')
	);
	$form['cadastro']['proreitoria'] = array (
			'#type' 				=> 'select',
			'#title' 				=> t('Pró-Reitoria'),
			'#default_value'=> empty($modalidade->proreitoria->id) ? NULL : $modalidade->proreitoria->id,
			'#options' 			=> package_entities(ProReitoria::TYPE), // Carrega as proreitorias cadastradas
			'#required' 		=> TRUE,
	);
	$form['cadastro']['nome'] = array (
			'#type' 				=> 'textfield',
			'#default_value'=> $modalidade->nome,
			'#title' 				=> t('Nome da modalidade'),
			'#required' 		=> TRUE,
	);
	$form['cadastro']['valor']= array (
			'#type' 				=> 'textfield',
			'#default_value'=> $modalidade->valor,
			'#required' 		=> TRUE,
			'#title' 				=> t('Valor'),
			'#description' 	=> 'Ex: 360,00',
			'#size' 				=> 8,
			'#maxlength' 		=> 8,
	);

	// Cadastro do tipo de modalidade
	$form['tipo'] = array(
			'#title' => t('Tipo de Modalidade de Bolsa'),
			'#type' => 'radios',
			'#default_value' => empty($modalidade->tipo->id) ? 1 : $modalidade->tipo->id,
			'#options' => package_entities(TipoModalidade::TYPE),			
	);
		
	// Cadastro de restricoes
	$form['restricoes'] = array(
			'#type' 		=> 'fieldset',
			'#title' 		=> t('Selecione as Restrições.'),
			'#states' 	=> array(
					'visible' => array( // se o tipo for '1', deixa como visivel a tabela de restricoes
							':input[name="tipo"]' => array('value' => 2),
					),
			),
	);
	// Tabela de Selecao de restricoes de modalidade
	$form['restricoes']['table'] = array
	(
			'#type' 		=> 'tableselect',
			'#header' 	=> array(Modalidade::TYPE => t('Modalidades') ),
			'#options' 	=> package_assoc_entities(Modalidade::TYPE, Modalidade::TYPE), // carrega as modalidades ja cadastradas
			'#empty'		=> t('Não há outras Modalidades cadastradas no momento!'),
	);

}

/** Retira os dados do formulario */
function modalidades_get_form_data(&$form_state) {
	$m = $form_state['values']['modalidades'];
	$modalidade = new StdClass();
	
	if(!empty($m->id) ) {
		$modalidade->id = $m->id;
	}	
	
	$modalidade->nome 					= $form_state['values']['nome'];	
	$modalidade->proreitoria_id = $form_state['values']['proreitoria'];	
	$modalidade->tipo_id			  = $form_state['values']['tipo'];	
	$modalidade->valor 					= $form_state['values']['valor'];
	$modalidade->restricoes     = array();			
	
	foreach ( ($form_state['values']['table']) as $line) {
		array_push($modalidade->restricoes, $line);
	}

	return $modalidade;
}

/* 
 * Cadastro de adicao
 */

/** Formulario de adicao */
function modalidades_form($form, &$form_state, $modalidade) {
	modalidades_standard_form($form, $modalidade); // chama a funcao que cria o formulario padrao de cadastro
	$form['submit'] = array(
			'#type' 	=> 'submit',
			'#value' 	=> t('Cadastrar'),
	);
	return $form;
}

/** Validacao */
function modalidades_form_validate($form, &$form_state) {}

/** Submissao do formulario */
function modalidades_form_submit($form, &$form_state) {
	$modalidade = modalidades_get_form_data($form_state); // pega os dados do formulario
	DAO::daoFactory(Modalidade::TYPE)->add($modalidade); // Chama o DaoModalidade e o metodo save()	
	
	foreach ($modalidade->restricoes as $line) {
		if ($line != 0) {
			$restricao = new stdClass();
			$restricao->modalidade1_id = $modalidade->id;
			$restricao->modalidade2_id = $line;
			drupal_write_record('restricao_modalidade', $restricao);
		}
	}
	
	$form_state['redirect'] = "modalidades/". $modalidade->id;
	drupal_set_message(t("Modalidade de bolsa cadastrada com sucesso") );
}

/* 
 * Cadastro de atualizacao 
 */

/** Formulario de atualizacoes */
function modalidades_form_update($form, &$form_state, $id) {
	$modalidade = DAO::daoFactory(Modalidade::TYPE)->get($id);	 // Procura pela modalidade passada pela id na url
	modalidades_standard_form($form, $modalidade);
	$form['submit'] = array (
			'#type'  => 'submit',
			'#value' => t('Atualizar'),
	);
	return $form;
}

/** Submissao do update de modalidades */
function modalidades_form_update_submit($form, &$form_state) {
	$modalidade = modalidades_get_form_data($form_state);
	DAO::daoFactory(Modalidade::TYPE)->update($modalidade);
	
	foreach ($modalidade->restricoes as $line) {
		if ($line != 0) {
			$restricao = new stdClass();
			$restricao->modalidade1_id = $modalidade->id;
			$restricao->modalidade2_id = $line;
			drupal_write_record('restricao_modalidade', $restricao);
		}	
	}
	
	$form_state['redirect'] = "modalidades/". $modalidade->id;
	drupal_set_message(t("Modalidade atualizada com sucesso") );
}

/** Validacao do formulario de atualizacao */
function modalidades_form_update_validate($form, &$form_state) {}
